package middleware

import (
	"net/http"

	"gitee.com/kun_liu/to-log/app/models"
	"gitee.com/kun_liu/to-log/pkg/database"
	"github.com/gin-gonic/gin"
)

// AdminAuth 后台认证中间件
func AdminAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 获取session中的用户ID
		userID, exists := c.Get("user_id")
		if !exists || userID == nil {
			// 重定向到登录页
			c.Redirect(http.StatusFound, "/admin/login")
			c.Abort()
			return
		}

		// 查询用户信息
		db := database.GetDB()
		var user models.User
		result := db.First(&user, userID)
		if result.Error != nil {
			// 用户不存在，重定向到登录页
			c.Redirect(http.StatusFound, "/admin/login")
			c.Abort()
			return
		}

		// 检查用户权限
		if user.Group != "administrator" {
			// 权限不足，重定向到首页
			c.Redirect(http.StatusFound, "/")
			c.Abort()
			return
		}

		// 将用户信息存入上下文
		c.Set("user", user)

		c.Next()
	}
}

// ApiAuth API认证中间件
func ApiAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 获取请求头中的token
		token := c.GetHeader("Authorization")
		if token == "" {
			c.JSON(http.StatusUnauthorized, gin.H{
				"success": false,
				"message": "未授权访问",
			})
			c.Abort()
			return
		}

		// 验证token
		// 实际项目中应使用JWT等方式验证token
		if token != "token_placeholder" {
			c.JSON(http.StatusUnauthorized, gin.H{
				"success": false,
				"message": "无效的token",
			})
			c.Abort()
			return
		}

		// 将用户ID存入上下文
		c.Set("user_id", 1) // 实际项目中应从token中获取用户ID

		c.Next()
	}
}
